''========================================================
'' Autor: 		Luis Antonio Lara Capetillo
'' Fecha Creación: 	31/5/2013
'' Descripcion: 	Clase Componente ctlTrabajoCaliente
''========================================================

Public Class ctlTrabajoCaliente

  Inherits System.Web.UI.UserControl
	    Dim tablaAuxiliar As DataTable

#Region "Propiedades"
  ''' <summary>
  ''' Obtiene o establece el valor Fecha_Inicio del TextBox txtFecha_Inicio
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property Fecha_Inicio() As String
    Get
      Return Me.txtFecha_Inicio.Text
    End Get
    Set(value As String)
      Me.txtFecha_Inicio.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o establece el valor Fecha_Fin del TextBox txtFecha_Fin
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property Fecha_Fin() As String
    Get
      Return Me.txtFecha_Fin.Text
    End Get
    Set(value As String)
      Me.txtFecha_Fin.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o estable el valor Descripcion del TextBox txtDescripcion
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property Descripcion() As String
    Get
      Return Me.txtDescripcion.Text
    End Get
    Set(value As String)
      Me.txtDescripcion.Text = value
    End Set
  End Property

  

  ''' <summary>
  ''' Obtiene o estable el valor Descripcion del TextBox txtDescripcion
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property Descripcion() As String
    Get
      Return Me.txtDescripcion.Text
    End Get
    Set(value As String)
      Me.txtDescripcion.Text = value
    End Set
  End Property

    ''' <summary>
    ''' Obtiene la tabla con la informacion del gridview
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public ReadOnly Property TablaDatos() As DataTable
        Get
            ObtenerFilasAgregadas()
            Return tablaAuxiliar
        End Get
    End Property


  ''' <summary>
  ''' Obtiene o estable el valor ResidenteResponsable del TextBox txtResidenteResponsable
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property ResidenteResponsable() As String
    Get
      Return Me.txtResidenteResponsable.Text
    End Get
    Set(value As String)
      Me.txtResidenteResponsable.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o estable el valor SeguridadAPIVer del TextBox txtSeguridadAPIVer
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property SeguridadAPIVer() As String
    Get
      Return Me.txtSeguridadAPIVer.Text
    End Get
    Set(value As String)
      Me.txtSeguridadAPIVer.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o estable el valor SuperintendenteObra del TextBox txtSuperintendenteObra
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property SuperintendenteObra() As String
    Get
      Return Me.txtSuperintendenteObra.Text
    End Get
    Set(value As String)
      Me.txtSuperintendenteObra.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o estable el valor AuxiliarResponsable del TextBox txtAuxiliarResponsable
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property AuxiliarResponsable() As String
    Get
      Return Me.txtAuxiliarResponsable.Text
    End Get
    Set(value As String)
      Me.txtAuxiliarResponsable.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o estable el valor PersonaResponsable del TextBox txtPersonaResponsable
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property PersonaResponsable() As String
    Get
      Return Me.txtPersonaResponsable.Text
    End Get
    Set(value As String)
      Me.txtPersonaResponsable.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o estable el valor SuperintendenteCargo del TextBox txtSuperintendenteCargo
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property SuperintendenteCargo() As String
    Get
      Return Me.txtSuperintendenteCargo.Text
    End Get
    Set(value As String)
      Me.txtSuperintendenteCargo.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o establece el valor Fecha_Termino del TextBox txtFecha_Termino
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property Fecha_Termino() As String
    Get
      Return Me.txtFecha_Termino.Text
    End Get
    Set(value As String)
      Me.txtFecha_Termino.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Obtiene o estable el valor Observaciones del TextBox txtObservaciones
  ''' </summary>
  ''' <value>valor tipo String</value>
  ''' <returns>valor tipo String</returns>
  ''' <remarks></remarks>
  Public Property Observaciones() As String
    Get
      Return Me.txtObservaciones.Text
    End Get
    Set(value As String)
      Me.txtObservaciones.Text = value
    End Set
  End Property

  ''' <summary>
  ''' Habilita o Desabilita el Control para Edicion
  ''' </summary>
  ''' <value>True o False</value>
  ''' <remarks></remarks>
  Public WriteOnly Property Enabled() As Boolean
    Set(value As Boolean)
	  txtFecha_Inicio.Enabled=value
      txtFecha_Fin.Enabled=value
      infLugar.Enabled=value
      txtDescripcion.Enabled=value
      gdvNombre.Enabled=value
      txtDescripcion.Enabled=value
      gdvNombre.Enabled=value
      txtResidenteResponsable.Enabled=value
      txtSeguridadAPIVer.Enabled=value
      txtSuperintendenteObra.Enabled=value
      txtAuxiliarResponsable.Enabled=value
      txtPersonaResponsable.Enabled=value
      txtSuperintendenteCargo.Enabled=value
      txtFecha_Termino.Enabled=value
      txtObservaciones.Enabled=value
      
    End Set
  End Property

  ''' <summary>
  ''' Habilita o Desabilita el Control para solo lectura
  ''' </summary>
  ''' <value>True o False</value>
  ''' <remarks>ReadOnly</remarks>
  Public WriteOnly Property Lectura() As Boolean
    Set(value As Boolean)
	  txtFecha_Inicio.ReadOnly=value
      txtFecha_Fin.ReadOnly=value
      infLugar.ReadOnly=value
      txtDescripcion.ReadOnly=value
      gdvNombre.ReadOnly=value
      txtDescripcion.ReadOnly=value
      gdvNombre.ReadOnly=value
      txtResidenteResponsable.ReadOnly=value
      txtSeguridadAPIVer.ReadOnly=value
      txtSuperintendenteObra.ReadOnly=value
      txtAuxiliarResponsable.ReadOnly=value
      txtPersonaResponsable.ReadOnly=value
      txtSuperintendenteCargo.ReadOnly=value
      txtFecha_Termino.ReadOnly=value
      txtObservaciones.ReadOnly=value
      
    End Set
  End Property


#End Region
#Region "Eventos"
    Protected Sub gdvNombre_RowCommand(sender As Object, e As System.Web.UI.WebControls.GridViewCommandEventArgs)
        Dim index As Integer
        index = Convert.ToInt32(e.CommandArgument)
        If e.CommandName = "Seleccionar" Then
            If CType(gdvNombre.Rows(index).Cells(3).FindControl("chxSelecionar"), CheckBox).Checked Then
                CType(gdvNombre.Rows(index).Cells(3).FindControl("chxSelecionar"), CheckBox).Checked = False
            Else
                CType(gdvNombre.Rows(index).Cells(3).FindControl("chxSelecionar"), CheckBox).Checked = True
            End If
        End If
    End Sub
  
    Protected Sub gdvNombre_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gdvNombre.RowDataBound
        Try
            e.Row.Cells(0).Visible = False
            e.Row.Cells(2).Visible = False
        Catch ex As Exception

        End Try
    End Sub

    Protected Sub btnNuevo_Click(sender As Object, e As System.Web.UI.ImageClickEventArgs) Handles btnNuevo.Click
        ObtenerFilasAgregadas()
        tablaAuxiliar.Rows.Add(tablaAuxiliar.NewRow())
        actualizarGrid(tablaAuxiliar)
    End Sub
	
	Protected Sub btnExportar_Click(sender As Object, e As System.Web.UI.ImageClickEventArgs) Handles btnExportar.Click
        If gvDatos.Rows.Count > 0 Then
            exportarExcel()
        End If
    End Sub

    Protected Sub btnImportar_Click(sender As Object, e As System.Web.UI.ImageClickEventArgs) Handles btnImportar.Click
        If fuImportar.HasFile Then
            importarExcel()
        End If
    End Sub
	
    ''' <summary>
    ''' Evento que se genera cuando se da clic a cualquier boton del gridView
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Protected Sub gdvDatos_RowCommand(sender As Object, e As System.Web.UI.WebControls.GridViewCommandEventArgs)
        Dim index As Integer
        index = Convert.ToInt32(e.CommandArgument)
        If e.CommandName = "Eliminar" Then
            ObtenerFilasAgregadas()
            tablaAuxiliar.Rows(index).Delete()
            actualizarGrid(tablaAuxiliar)
        End If
    End Sub

#End Region
#Region "Metodos"
  

    Public Sub mostrarGrid()
        Dim tabla As New DataTable
        Dim row As DataRow = tabla.NewRow()
        tabla.Rows.Add(row)
        gdvDatos.DataSource = tabla
        gdvDatos.DataBind()
    End Sub

    Private Sub ObtenerFilasAgregadas()
        tablaAuxiliar = crearTabla()
        For i As Integer = 0 To gdvDatos.Rows.Count - 1
            Dim NuevaFila As DataRow = tablaAuxiliar.NewRow()
            'NuevaFila("Contenedor") = CType(gdvDatos.Rows(i).Cells(0).FindControl("txtContenedor"), TextBox).Text
			NuevaFila("nid") = CType(gdvDatos.Rows(i).Cells(0).FindControl("txtnid"), TextBox).Text
	NuevaFila("nidDocumento") = CType(gdvDatos.Rows(i).Cells(1).FindControl("txtnidDocumento"), TextBox).Text
	NuevaFila("nombre") = CType(gdvDatos.Rows(i).Cells(2).FindControl("txtnombre"), TextBox).Text
	NuevaFila("apellidoPat") = CType(gdvDatos.Rows(i).Cells(3).FindControl("txtapellidoPat"), TextBox).Text
	NuevaFila("apellidoMat") = CType(gdvDatos.Rows(i).Cells(4).FindControl("txtapellidoMat"), TextBox).Text
	NuevaFila("NSS") = CType(gdvDatos.Rows(i).Cells(5).FindControl("txtNSS"), TextBox).Text
	
			
            tablaAuxiliar.Rows.Add(NuevaFila)
        Next
    End Sub

    Private Function crearTabla() As DataTable
        Dim tabla As New DataTable
        Dim str_NomColumnas(?NumeroColumnas) As String
        Dim Columna(str_NomColumnas.Length - 1) As DataColumn

		str_NomColumnas(0) = "nid"
	str_NomColumnas(1) = "nidDocumento"
	str_NomColumnas(2) = "nombre"
	str_NomColumnas(3) = "apellidoPat"
	str_NomColumnas(4) = "apellidoMat"
	str_NomColumnas(5) = "NSS"
	

		For i As Integer = 0 To str_NomColumnas.Length - 1
            Columna(i) = New DataColumn()
            Columna(i).DataType = System.Type.GetType("System.String")
            Columna(i).ColumnName = str_NomColumnas(i) 'nombre de la columna
            Columna(i).DefaultValue = ""
            tabla.Columns.Add(Columna(i))
        Next

        Return tabla
    End Function

    Private Sub actualizarGrid(tablaDatos As DataTable)
        Dim total_filas As Integer = tablaDatos.Rows.Count - 1
        Dim tabla As New DataTable

        For i As Integer = 0 To total_filas
            tabla.Rows.Add(tabla.NewRow())
        Next
        gdvDatos.DataSource = tabla
        gdvDatos.DataBind()

        For i As Integer = 0 To tablaDatos.Rows.Count - 1
			CType(gdvDatos.Rows(i).Cells(0).FindControl("txtnid"), TextBox).Text = tablaDatos.Rows(i)("nid")
	CType(gdvDatos.Rows(i).Cells(1).FindControl("txtnidDocumento"), TextBox).Text = tablaDatos.Rows(i)("nidDocumento")
	CType(gdvDatos.Rows(i).Cells(2).FindControl("txtnombre"), TextBox).Text = tablaDatos.Rows(i)("nombre")
	CType(gdvDatos.Rows(i).Cells(3).FindControl("txtapellidoPat"), TextBox).Text = tablaDatos.Rows(i)("apellidoPat")
	CType(gdvDatos.Rows(i).Cells(4).FindControl("txtapellidoMat"), TextBox).Text = tablaDatos.Rows(i)("apellidoMat")
	CType(gdvDatos.Rows(i).Cells(5).FindControl("txtNSS"), TextBox).Text = tablaDatos.Rows(i)("NSS")
	
        Next
    End Sub
	
	Public Function VerificarDatosGridView() As String
        Dim validar As New ValidacionCampo
        Dim str_Mensaje = ""

        For i As Integer = 0 To gdvDatos.Rows.Count - 1
            'str_Mensaje += validar.ValidaCampo(CType(gdvDatos.Rows(i).Cells(0).FindControl("txtContenedor"), TextBox), "Contenedor")
			str_Mensaje += validar.ValidaCampo(CType(gdvDatos.Rows(i).Cells(0).FindControl("txtnid"), TextBox), "nid")
	str_Mensaje += validar.ValidaCampo(CType(gdvDatos.Rows(i).Cells(1).FindControl("txtnidDocumento"), TextBox), "nidDocumento")
	str_Mensaje += validar.ValidaCampo(CType(gdvDatos.Rows(i).Cells(2).FindControl("txtnombre"), TextBox), "nombre")
	str_Mensaje += validar.ValidaCampo(CType(gdvDatos.Rows(i).Cells(3).FindControl("txtapellidoPat"), TextBox), "apellidoPat")
	str_Mensaje += validar.ValidaCampo(CType(gdvDatos.Rows(i).Cells(4).FindControl("txtapellidoMat"), TextBox), "apellidoMat")
	str_Mensaje += validar.ValidaCampo(CType(gdvDatos.Rows(i).Cells(5).FindControl("txtNSS"), TextBox), "NSS")
	
        Next

        Return str_Mensaje
    End Function

  ''' <summary>
  ''' Metodo para asignar los datos al componente 
  ''' </summary>
  ''' <param name="tablaDatos">DataTable donde se obtienen los datos</param>
  ''' <remarks></remarks>
  Public Sub AsignarDatos(ByVal tablaDatos As DataTable)
    Me.txtFecha_Inicio.Text= tablaDatos.Rows(0)("Fecha_Inicio").ToString
    Me.txtFecha_Fin.Text= tablaDatos.Rows(0)("Fecha_Fin").ToString
    Me.txtDescripcion.Text= tablaDatos.Rows(0)("Descripcion").ToString
    Me.txtDescripcion.Text= tablaDatos.Rows(0)("Descripcion").ToString
    Me.txtResidenteResponsable.Text= tablaDatos.Rows(0)("ResidenteResponsable").ToString
    Me.txtSeguridadAPIVer.Text= tablaDatos.Rows(0)("SeguridadAPIVer").ToString
    Me.txtSuperintendenteObra.Text= tablaDatos.Rows(0)("SuperintendenteObra").ToString
    Me.txtAuxiliarResponsable.Text= tablaDatos.Rows(0)("AuxiliarResponsable").ToString
    Me.txtPersonaResponsable.Text= tablaDatos.Rows(0)("PersonaResponsable").ToString
    Me.txtSuperintendenteCargo.Text= tablaDatos.Rows(0)("SuperintendenteCargo").ToString
    Me.txtFecha_Termino.Text= tablaDatos.Rows(0)("Fecha_Termino").ToString
    Me.txtObservaciones.Text= tablaDatos.Rows(0)("Observaciones").ToString
    
  End Sub

  ''' <summary>
  ''' Metodo para llenar el gdvDatos con datos de la table
  ''' </summary>
  ''' <param name="tabla">tabla donde se obtienen los datos</param>
  ''' <remarks></remarks>
  Public Sub llenarGdvDatos(ByVal tabla As DataTable)
    Me.gdvDatos.DataSource = tabla
    Me.gdvDatos.DataBind()
  End Sub
  
    Private Sub exportarExcel()
        Dim dset As New DataSet 'Crer dataset para exportar
        ObtenerFilasAgregadas() 'asignado los datos a la tabla auxiliar
        dset.Tables.Add(tablaAuxiliar) 'agregamos la tabla al dataset

        Dim excel As New Microsoft.Office.Interop.Excel.ApplicationClass
        Dim wBook As Microsoft.Office.Interop.Excel.Workbook
        Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet
        wBook = excel.Workbooks.Add()
        wSheet = wBook.ActiveSheet()
        wSheet.Name = "E-SComputo "
        Dim dt As System.Data.DataTable = dset.Tables(0)
        Dim dc As System.Data.DataColumn
        Dim dr As System.Data.DataRow
        Dim colIndex As Integer = 0
        Dim rowIndex As Integer = 0
        For Each dc In dt.Columns
            colIndex = colIndex + 1
            excel.Cells(1, colIndex) = dc.ColumnName
        Next
        For Each dr In dt.Rows
            rowIndex = rowIndex + 1
            colIndex = 0
            For Each dc In dt.Columns
                colIndex = colIndex + 1
                excel.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)
            Next
        Next
        wSheet.Columns.AutoFit()
        Dim blnFileOpen As Boolean = False
        Try
        Catch ex As Exception
            blnFileOpen = False
        End Try
        excel.Visible = True
    End Sub

    Private Sub importarExcel()
        If validarArchivoExcel() Then
            Try
                Dim nombreArchivo As String = "C:\Temp\AduanaMultipleExcel.xls"
                Dim oFileStream As System.IO.FileStream
                oFileStream = New System.IO.FileStream(nombreArchivo, System.IO.FileMode.Create)
                oFileStream.Write(Me.fuImportar.FileBytes, 0, Me.fuImportar.FileBytes.Length)
                oFileStream.Close()

                agregarExcel(nombreArchivo)
            Catch ex As Exception
                mensaje("Error al importar Excel: " + ex.Message)
            End Try

        End If

    End Sub

    Private Function validarArchivoExcel() As Boolean
        Dim bol_Valor As Boolean = False
        If fuImportar.HasFile Then
            If fuImportar.FileName.ToString().EndsWith(".xls") Or fuImportar.FileName.ToString().EndsWith(".xlsx") Then
                bol_Valor = True
            Else
                mensaje("Debe agregar un archivo de tipo exccel con extencion .xls")
                bol_Valor = False
            End If
        End If
        Return bol_Valor
    End Function

    Private Sub agregarExcel(ByVal nombreArchivo As String)
        Dim excel As New Microsoft.Office.Interop.Excel.ApplicationClass
        Dim wBook As Microsoft.Office.Interop.Excel.Workbook
        Dim hoja As Microsoft.Office.Interop.Excel.Worksheet
        Dim hayMasDatos As Boolean = True
        Dim fila As Integer = 2
        Dim tablaExcel As DataTable

        Dim descripcion As String
        Dim marca As String
        Dim modelo As String
        Dim serie As String
        Dim uso As String
        Dim factura As String
        Dim observaciones As String


        Try
            wBook = excel.Workbooks.Open(nombreArchivo)
            hoja = wBook.ActiveSheet()
            tablaExcel = crearTabla()
					'editar esta parte
                    /*While hayMasDatos = True ' Vandera con valor true estatico, se abortara el ciclo cuando se encuentre una fila vacia
                        descripcion = hoja.Range("A" & fila).Value
                        marca = hoja.Range("B" & fila).Value
                        modelo = hoja.Range("C" & fila).Value

                        'Si todos los campos de la fila estan null termina de leer el archivo
                        If descripcion Is Nothing And marca Is Nothing And modelo Is Nothing _
                            And serie Is Nothing And uso Is Nothing And factura Is Nothing _
                            And observaciones Is Nothing Then

                            Exit While
                        Else
                            Dim NuevaFila As DataRow = tablaExcel.NewRow()
                            NuevaFila("Descripcion") = hoja.Range("A" & fila).Value
                            NuevaFila("Marca") = hoja.Range("B" & fila).Value
                            NuevaFila("Modelo") = hoja.Range("C" & fila).Value

                            tablaExcel.Rows.Add(NuevaFila)
                            fila += 1
                        End If
                    End While*/

                
            Me.gvDatos.DataSource = tablaExcel
            Me.gvDatos.DataBind()
            actualizarGrid(tablaExcel)
            wBook.Close()
            excel.Quit()
        Catch ex As Exception
            wBook.Close()
            excel.Quit()
            Throw (ex)
        End Try
    End Sub
	


    ''' <summary>
    ''' Funcion para verificar los datos del control
    ''' </summary>
    ''' <returns>str_Mensaje</returns>
    ''' <remarks>si hay datos no validos regresara un mensaje de lo contrario ""</remarks>
    Public Function VerificarDatos() As String
        Dim validar As New ValidacionCampo
        Dim str_Mensaje = ""
		
		str_Mensaje += validar.ValidaCampo(txtFecha_Inicio, "Fecha_Inicio")
    str_Mensaje += validar.ValidaCampo(txtFecha_Fin, "Fecha_Fin")
    str_Mensaje += validar.ValidaCampo(infLugar, "Lugar")
    str_Mensaje += validar.ValidaCampo(txtDescripcion, "Descripcion")
    str_Mensaje += validar.ValidaCampo(gdvNombre, "Nombre")
    str_Mensaje += validar.ValidaCampo(txtDescripcion, "Descripcion")
    str_Mensaje += validar.ValidaCampo(gdvNombre, "Nombre")
    str_Mensaje += validar.ValidaCampo(txtResidenteResponsable, "ResidenteResponsable")
    str_Mensaje += validar.ValidaCampo(txtSeguridadAPIVer, "SeguridadAPIVer")
    str_Mensaje += validar.ValidaCampo(txtSuperintendenteObra, "SuperintendenteObra")
    str_Mensaje += validar.ValidaCampo(txtAuxiliarResponsable, "AuxiliarResponsable")
    str_Mensaje += validar.ValidaCampo(txtPersonaResponsable, "PersonaResponsable")
    str_Mensaje += validar.ValidaCampo(txtSuperintendenteCargo, "SuperintendenteCargo")
    str_Mensaje += validar.ValidaCampo(txtFecha_Termino, "Fecha_Termino")
    str_Mensaje += validar.ValidaCampo(txtObservaciones, "Observaciones")
    
		
        Return str_Mensaje
    End Function

#End Region
End Class
